package com.example.myapplication.principle.liskov_substitution

/**
 * 子类继承父类时，可以实现父类的抽象方法，不要 重写 父类的方法，子类增加自己特有的方法。子类可以完全代替父类。
 * 子类可以实现父类的抽象方法，但不能覆盖父类的非抽象方法。
 * 当子类的方法重载父类的方法时，方法的前置条件（即方法的形参）要比父类方法的输入参数更宽松。
 * 当子类的方法实现父类的抽象方法时，方法的后置条件（即方法的返回值）要比父类更严格。
 * 里氏代换原则是很多其它设计模式的基础。它和开放封闭原则的联系尤其紧密。违背了里氏代换原则就一定不符合开放封闭原则。
 * 目的：防止继承带来的问题
 * */
abstract class 里氏替换 {
    abstract fun doSomething()
    abstract fun doSomething2(): Any?

    fun doAnything(s: String) {
        println("不要重写$s")
    }
}